home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1997 #3
/
Amiga Plus CD - 1997 - No. 03.iso
/
pd
/
programmierung
/
alienbreed3d2_src
/
demo
/
menu
/
menunb.s
< prev
next >
Wrap
Text File
|
1997-01-31
|
46KB
|
2,168 lines
main_debugoff
main_sysinfooff
main_reqinfooff
main_endinfooff
;main_disabledos
main_playeroff
main_meteroff
mnu_GETBLITINT:
move.l gfxbase,a6
jsr _LVOOwnBlitter(a6)
move.l 4.w,a6
lea BLITInt,a1
moveq #6,d0
jsr _LVOSetIntVector(a6)
move.l d0,SYSTEMBLITINT
rts
mnu_DROPBLITINT:
WBSLOW
WBSLOW
move.l 4.w,a6
move.l SYSTEMBLITINT,a1
moveq #6,d0
jsr _LVOSetIntVector(a6)
move.l gfxbase,a6
jsr _LVODisownBlitter(a6)
rts
mnu_nowait ; Skip the "waiting for opp.."
macro_sync: MACRO ; Kills: d7 -- Macro_Sync
IFND main_meteroff
movem.l d0-a0,-(a7)
move.l main_dataptr,a0
move.l 44(a0),a0
jsr (a0)
move.l main_dataptr,a0
move.l d0,48(a0)
ENDC
.waitsync\@: move.l $dff004,d7
and.l #$1ff00,d7
cmp.l #305*$100,d7
bne.s .waitsync\@
IFND main_meteroff
move.l main_dataptr,a0
move.l 40(a0),a0
jsr (a0)
movem.l (a7)+,d0-a0
ENDC
ENDM
; include "demo:System/Main_V3.82.S"
mnu_start: bsr.w mnu_copycredz
bsr.w mnu_setscreen
move.l a7,mnu_mainstack
bsr.w mnu_viewcredz
bsr.w mnu_cls
IFND mnu_nocode
bsr.w mnu_protection
ENDC
mnu_loop: lea mnu_mainmenu,a0
bsr.w mnu_domenu
lea mnu_quitmenu,a0
bsr.w mnu_domenu
bra.w mnu_loop
mnu_exit: move.l mnu_mainstack,a7
bsr.w mnu_clearscreen
rts
mnu_protection:
.retry: moveq.l #0,d0
bsr.w mnu_getrnd
move.l d0,d2
bsr.w mnu_getrnd
move.l d0,d1
bsr.w mnu_getrnd
lsr.w #4,d2
lsr.w #2,d1
divu #7,d0
swap.w d0 ; d0=Page number
divu #50,d1
swap.w d1
addq.w #1,d1 ; d1=Row number
divu #17,d2
swap.w d2
addq.w #1,d2 ; d2=Column number
movem.l d0-d2,-(a7)
add.w #65,d0
move.b d0,mnu_tableptr
add.w #64,d2
move.b d2,mnu_columnptr
move.w d1,d2
ext.l d1
divu #10,d1
add.w #48,d1
move.b d1,mnu_rowptr
swap.w d1
add.w #48,d1
move.b d1,mnu_rowptr+1
lea mnu_protecttext,a0
moveq.l #4,d0
moveq.l #60,d1
bsr.w mnu_printxy
clr.w mnu_row
clr.w mnu_spread
move.w #1,mnu_items
move.w #180,mnu_cury
moveq.l #0,d7
.print: move.l d7,-(a7)
lea mnu_numberptr,a0
moveq.l #24,d0
move.l #180,d1
bsr.w mnu_printxy
move.l (a7)+,d7
.inploop: move.l d7,-(a7)
move.w #24,mnu_curx
add.w d7,mnu_curx
add.w d7,mnu_curx
bsr.w mnu_docursor
jsr key_readkey
move.l (a7)+,d7
tst.b d0
beq.s .inploop
lea mnu_numberptr,a0
add.l d7,a0
tst.w d7
beq.s .skipback
cmp.b #65,d0
bne.s .skipback
; back space
move.b #32,(a0)
subq.w #1,d7
bra.s .print
.skipback: cmp.w #3,d7
bne.s .noenter
cmp.w #68,d0
beq.s .enter
cmp.w #64,d0
bne.s .noenter
.enter: bra.s .exit
.noenter: cmp.w #3,d7
beq.s .error
cmp.b #1,d0
blo.s .error
cmp.b #10,d0
bhi.s .error
bne.s .oknum
moveq #0,d0
.oknum:
add.b #'0',d0
move.b d0,(a0)
addq.w #1,d7
bra.w .print
.error: move.l #mnu_errcursanim,mnu_frameptr
bra.w .inploop
.exit: movem.l (a7)+,d0-d2
bsr.w mnu_decoder
moveq.l #0,d1
moveq.l #0,d2
move.b mnu_numberptr,d1
sub.w #48,d1
mulu #10,d1
move.b mnu_numberptr+1,d2
sub.w #48,d2
add.w d2,d1
mulu #10,d1
move.b mnu_numberptr+2,d2
sub.w #48,d2
add.w d2,d1
cmp.w d1,d0
beq.s .ok
move.l #mnu_errcursanim,mnu_frameptr
move.b #32,mnu_numberptr
move.b #32,mnu_numberptr+1
move.b #32,mnu_numberptr+2
subq.w #1,.tries
beq.s .quit
bra.w .retry
.ok: rts
.quit: bsr.w mnu_cls
moveq.l #4,d0
moveq.l #110,d1
lea mnu_dontbelong,a0
bsr.w mnu_printxy
clr.l counter
move.l #mnu_errcursorlong,mnu_frameptr
move.w #34,mnu_curx
move.w #130,mnu_cury
.w8loop: bsr.w mnu_docursor
cmp.l #100,counter
blo.s .w8loop
jmp mnu_exit
.tries: dc.w 3
mnu_decoder:;in: d0.l=Table
; d1.l=Row
; d2.l=Column
MODIT MACRO
divs #643,\1
swap \1
ENDM
lea .variables(pc),a0
asl.w #4,d0
add.w d0,a0
move.w d1,d0 ;row
muls d0,d0 ;row*row
MODIT d0
move.w d2,d4 ;col
muls d4,d4 ;col*col
MODIT d4
move.w d0,d5 ;row*row
muls d5,d5 ;row*row*row*row
MODIT d5
move.w d4,d6 ;col*col
muls d6,d6 ;col*col*col*col
MODIT d6
muls d5,d6 ;row*row*row*row*col*col*col*col
MODIT d6
muls (a0),d6 ;*var a
MODIT d6
muls d1,d4
MODIT d4
muls d2,d4
muls 2(a0),d4
MODIT d4
add.w d4,d6
move.w d1,d0
muls d2,d0
MODIT d0
muls 4(a0),d0
MODIT d0
add.w d0,d6
muls 6(a0),d1
MODIT d1
muls 8(a0),d2
MODIT d2
add.w d1,d2
add.w d2,d6
add.w 10(a0),d6
ext.l d6
MODIT d6
neg.w d6
add.w #999,d6
move.w d6,d0
rts
rts
; a b c d e f
.variables: dc.w 54,97,2,94,66,23,0,0 ; Table A
dc.w 61,78,247,622,59,324,0,0 ; Table B
dc.w 34,76,99,168,43,66,0,0 ; Table C
dc.w 63,67,422,132,66,87,0,0 ; Table D
dc.w 43,49,47,84,51,9,0,0 ; Table E
dc.w 34,97,20,61,74,33,0,0 ; Table F
dc.w 74,54,61,62,96,147,0,0 ; Table G
.dividers:
; dc.l 643*2000
dc.w 643
dc.l 999
mnu_getrnd: move.w $dff00a,d0
add.w $dff00c,d0
add.w $dff008,d0
add.w $dff012,d0
add.w $dff014,d0
add.w $dff016,d0
add.w $dff018,d0
add.w $dff01a,d0
add.w $dff002,d0
add.w $dff004,d0
add.w $dff006,d0
rts
mnu_viewcredz: clr.l counter
bsr.w mnu_copycredz
.w8key: jsr key_readkey
cmp.l #50*10,counter
beq.s .exit
tst.w d0
beq.s .w8key
.exit: rts
mnu_copycredz: lea mnu_frame,a0
lea mnu_morescreen+3*40*256+32*40,a1
move.w #10*192-1,d0
.loop: move.l (a0)+,(a1)+
move.l 40*192-4(a0),40*256-4(a1)
move.l 2*40*192-4(a0),2*40*256-4(a1)
dbra d0,.loop
rts
mnu_clearscreen:bsr.w mnu_fadeout
clr.l main_vblint
.loop1: tst.w mnu_bltbusy
bne.s .loop1
; bsr.w key_kbdexit
clr.l main_bltint
; macro_sync
move.w #$7de0,$dff096
rts
mnu_setscreen: bsr.w mnu_init
macro_sync
move.w #$7de0,$dff096
move.w #$8200!%110000000,$dff096
move.l #mnu_copper,$dff080
move.w #0,$dff088
; bsr.w key_kbdinit
move.l #mnu_vblint,main_vblint
bsr.w mnu_fadein
rts
mnu_vblint:
bsr.w mnu_movescreen
;bsr.w mnu_dofire
; bsr.w key_kbdlevel3
bsr.w mnu_animcursor
;bsr.w mnu_plot
rts
mnu_init: bsr.w mnu_initrnd ; Uses palette buffer
bsr.w mnu_createpalette
tst.w .cp
bne.w .skipfs
lea mnu_screen,a0
lea mnu_screen+40*256,a1
lea mnu_screen+40*256*2,a2
lea mnu_screen+40*256*3,a3
move.w #40*256/4-1,d1
.fsloop: move.l (a1),d0
move.l d0,(a2)+
move.l d0,(a3)+
move.l (a0)+,(a1)+
dbra d1,.fsloop
.skipfs: st.b .cp
;-------------------------------------------------------------- Clear screen --
lea mnu_morescreen,a0
move.l #40*256*3/16-1,d0
moveq.l #0,d1
.clrloop:
REPT 4
move.l d1,(a0)+
ENDR
dbra d0,.clrloop
bsr.w mnu_cls
;--------------------------------------------------------------- Set bplptrs --
lea mnu_bplptrs+2,a0
move.l #mnu_screen,d0
moveq.l #0,d1
bsr.w .setbplptrs
move.l #mnu_screen+40*256*2,d0
moveq.l #0,d1
bsr.w .setbplptrs
move.l #mnu_morescreen,d0
moveq.l #5,d1
bsr.s .setbplptrs
;-------------------------------------------------------------- Init palette --
lea mnu_palette,a2
moveq.l #7,d0 ; #of banks-1
move.l #$01060000,d6
move.l #$01060200,d7
lea mnu_colptrs,a0
lea mnu_colptrs+33*4,a1
.bankloop: moveq.l #31,d1 ; d1=#of colour/bank
move.l d6,(a0)+
move.l d7,(a1)+
move.w #$0180,d5
.colloop: ;move.l (a2)+,d2
clr.l d2
move.l d2,d3
and.l #$f0f0f0,d2
lsr.l #4,d2 ; x0x0x
lsl.b #4,d2 ; x0xx0
lsl.w #4,d2 ; xxx00
lsr.l #8,d2 ; 00xxx
and.l #$f0f0f,d3
lsl.b #4,d3 ; x0xx0
lsl.w #4,d3 ; xxx00
lsr.l #8,d3 ; 00xxx
move.w d5,(a0)+
move.w d2,(a0)+
move.w d5,(a1)+
move.w d3,(a1)+
addq.w #2,d5
dbra d1,.colloop
add.l #33*4,a0
add.l #33*4,a1
add.l #$2000,d6
add.l #$2000,d7
dbra d0,.bankloop
move.l #-2,(a0)
rts
.setbplptrs: swap.w d0
move.w d0,(a0)
swap.w d0
move.w d0,4(a0)
addq.l #8,a0
add.l #40*256,d0
dbra d1,.setbplptrs
rts
.cp: dc.w 0
mnu_initrnd: lea mnu_palette+256,a1
move.w #255,d0
.parityloop: move.b d0,d1
and.w #$1,d1
move.b d0,d2
lsr.w #2,d2
and.w #$1,d2
eor.w d2,d1
move.b d0,d2
lsr.w #3,d2
and.w #$1,d2
eor.w d2,d1
move.b d0,d2
lsr.w #5,d2
and.w #$1,d2
eor.w d2,d1
move.b d1,-(a1)
dbra d0,.parityloop
move.l a1,a4 ; a4=Parity buffer
move.l #'TBL!',d3 ; Random seed
lea mnu_morescreen+6*40*256,a0
move.w #40*256+8192-1,d0
.loop: moveq.l #0,d1 ; d1=0
move.l d3,d2 ; d2=Random seed
move.b d2,d1
and.b #$fe,d2
move.b (a4,d1.l),d1
or.b d1,d2
ror.w #1,d2
swap.w d2
move.b d2,d1
and.b #$fe,d2
move.b (a4,d1.l),d1
or.b d1,d2
ror.w #1,d2
move.l d2,d3
move.w d2,d1
lsr.w #8,d1
or.w d1,d2
move.l d2,d1
swap.w d1
or.w d1,d2
move.b d2,(a0)+
dbra d0,.loop
rts
mnu_movescreen: move.w mnu_screenpos,d0
and.w #$ff,d0
mulu #40,d0
add.l #mnu_screen,d0
lea mnu_bplptrs+2,a0
moveq.l #1,d1
.loop: swap.w d0
move.w d0,(a0)
swap.w d0
move.w d0,4(a0)
addq.l #8,a0
add.l #40*256*2,d0
dbra d1,.loop
addq.w #1,mnu_screenpos
rts
mnu_createpalette:
lea mnu_backpal,a0
lea mnu_firepal,a1
lea mnu_fontpal,a2
lea mnu_palette+256*4,a3
move.w #255,d0
.loop: move.w d0,d1
and.w #$e0,d1
beq.s .next
lsr.w #5,d1
move.l (a2,d1.w*4),-(a3)
bra.s .cont
.next: move.w d0,d1
and.w #$1c,d1
beq.s .next1
lsr.w #2,d1
move.w d0,d2
and.w #$3,d2
moveq #0,d3
move.b 3(a1,d1.w*4),d3
moveq #0,d4
move.b 3(a1,d2.w*4),d4
add.w d4,d3
cmp.w #255,d3
ble.s .okmax1
move.b #255,d3
.okmax1
move.b d3,-(a3)
moveq #0,d3
move.b 2(a1,d1.w*4),d3
muls #3,d3
asr.w #2,d3
moveq #0,d4
move.b 2(a1,d2.w*4),d4
add.w d4,d3
cmp.w #255,d3
ble.s .okmax2
move.b #255,d3
.okmax2
move.b d3,-(a3)
moveq #0,d3
move.b 1(a1,d1.w*4),d3
moveq #0,d4
move.b 1(a1,d2.w*4),d4
add.w d4,d3
cmp.w #255,d3
ble.s .okmax3
move.b #255,d3
.okmax3
move.w d3,-(a3)
; move.l (a1,d1.w*4),-(a3)
bra.s .cont
.next1: move.w d0,d1
and.w #$3,d1
move.l (a0,d1.w*4),-(a3)
.cont: dbra d0,.loop
rts
mnu_fadespeed = 16
mnu_fadein: clr.w mnu_fadefactor
moveq.l #256/mnu_fadespeed-1,d0
.loop: move.l d0,-(a7)
.wsync: cmp.b #$80,$dff006
blt.s .wsync
cmp.b #$90,$dff006
bgt.s .wsync
bsr.w mnu_fade
.wsync2: cmp.b #$a0,$dff006
blt.s .wsync2
add.w #mnu_fadespeed,mnu_fadefactor
move.l (a7)+,d0
dbra d0,.loop
move.w #255,mnu_fadefactor
.wsync3: cmp.b #$80,$dff006
blt.s .wsync3
cmp.b #$90,$dff006
bgt.s .wsync3
bsr.w mnu_fade
rts
mnu_fadeout: move.w #255,mnu_fadefactor
moveq.l #256/mnu_fadespeed-1,d0
.loop: move.l d0,-(a7)
; bsr.w mnu_docursor
.wsync: cmp.b #$80,$dff006
blt.s .wsync
cmp.b #$90,$dff006
bgt.s .wsync
bsr.w mnu_fade
.wsync2: cmp.b #$a0,$dff006
blt.s .wsync2
sub.w #mnu_fadespeed,mnu_fadefactor
move.l (a7)+,d0
dbra d0,.loop
clr.w mnu_fadefactor
.wsync3: cmp.b #$80,$dff006
blt.s .wsync3
cmp.b #$90,$dff006
bgt.s .wsync3
bsr.w mnu_fade
rts
mnu_fadefactor: dc.w 0
mnu_fade: lea mnu_palette,a2
moveq.l #7,d0
lea mnu_colptrs+2,a0
lea mnu_colptrs+2+33*4,a1
move.w mnu_fadefactor,d7
move.l #$f0f0f0,d5
move.l #$ff,d6
.bankloop: moveq.l #31,d1
addq.l #4,a0
addq.l #4,a1
.colloop: moveq.l #0,d4
move.l (a2)+,d2
REPT 2
move.l d2,d3
and.w d6,d3
mulu d7,d3
divu d6,d3
move.b d3,d4
ror.l #8,d4
ror.l #8,d2
ENDR
move.l d2,d3
and.w d6,d3
mulu d7,d3
divu d6,d3
move.b d3,d4
ror.l #8,d4
ror.l #8,d4
move.l d4,d3
and.l d5,d3
lsr.l #4,d3 ; x0x0x
lsl.b #4,d3 ; x0xx0
lsl.w #4,d3 ; xxx00
lsr.l #8,d3 ; 00xxx
and.l #$f0f0f,d4
move.w d3,(a0)
lsl.b #4,d4 ; x0xx0
lsl.w #4,d4 ; xxx00
lsr.l #8,d4 ; 00xxx
addq.l #4,a0
move.w d4,(a1)
addq.l #4,a1
dbra d1,.colloop
add.l #33*4,a0
add.l #33*4,a1
dbra d0,.bankloop
rts
mnu_printxy:;in:a0,d0,d1=Text ptr,XPos,YPos (XPos in words YPos in pixels)
lea mnu_font,a3
lea mnu_font+176*40,a4
lea mnu_font+176*40*2,a5
moveq.l #40,d7
moveq.l #20,d6
move.l #40*16,d5
mulu d7,d1
add.w d0,d1
add.l #mnu_morescreen+40*256*3,d1
move.l d1,a1 ; a1=Ptr
move.l a1,a2
.loop: move.b (a0)+,d2
beq .exit
move.l mnu_printdelay,timer
.w8a: tst.l timer
bne.s .w8a
and.l #$ff,d2
sub.w #32,d2
bge.s .ok
move.l a2,a1
add.l #20*40,a1
move.l a1,a2
bra.s .loop
.ok: divu d6,d2
move.w d2,d3 ; d3=Y
swap.w d2 ; d2=X
mulu d5,d3 ; d3=Y Addy
lsl.w #1,d2
add.w d2,d3 ; d3=Addy Offset
move.l a1,a6
moveq.l #15,d2
.yloop:
move.w (a3,d3.l),(a6)
move.w (a4,d3.l),40*256(a6)
move.w (a5,d3.l),40*256*2(a6)
add.l d7,d3
add.l d7,a6
dbra d2,.yloop
addq.l #2,a1
bra .loop
.exit: rts
mnu_dofire: btst.b #0,main_counter+3
beq.s .skip
rts
.skip: move.l #mnu_bltint,main_bltint
move.w $dff006,d0
add.w d0,mnu_rnd
tst.b $dff002
.w8: tst.w mnu_bltbusy
beq.s .notdoneyet
rts
.notdoneyet:
.w82 btst.b #6,$dff002
bne.s .w82
lea mnu_sourceptrs,a0
move.l (a0),d0
move.l 4(a0),(a0)
move.l 8(a0),4(a0)
move.l d0,8(a0)
lea $dff000,a6
st.b mnu_bltbusy
move.w #$0040,$9c(a6) ; Clear BLT req
move.w #$8040,$9a(a6) ; Enable BLT int
move.w #$8200!%1000000,$96(a6) ; Enable blitter dma
bsr.w mnu_bltint
rts
mnu_bltint: bsr.w .getrnd
lea $dff000,a6
move.l .passptr,a0
move.l (a0),d0
beq.s .last
addq.l #4,.passptr
move.l d0,a0
jmp (a0)
.last: move.w #$0040,$9a(a6) ; Disable BLT int
move.w #%1000000,$96(a6) ; Disable blitter dma
move.l #.passlist,.passptr
clr.w mnu_bltbusy
rts
.getrnd: moveq.l #0,d0
move.w mnu_rnd,d0
and.l #8190,d0
add.l #mnu_morescreen+6*40*256,d0
move.l d0,mnu_rndptr
addq.w #5,mnu_rnd
rts
.rnd: dc.w 0
.passptr: dc.l .passlist
.passlist: dc.l mnu_pass1
dc.l mnu_pass2
dc.l mnu_pass3
dc.l 0
mnu_rnd: dc.w 0
mnu_bltbusy: dc.w 0
mnu_speed = 1
mnu_size = 256
mnu_subtract: dc.l 0
mnu_count: dc.w 0
mnu_pass1: clr.l mnu_subtract
move.w mnu_count,d0
addq.w #1,mnu_count
and.w #$3,d0
beq.s .l1
cmp.w #1,d0
bne.s .normal
move.l #-2,mnu_subtract
move.l #$fff80000,$40(a6) ; D=A+BC
bra.s .cont
.l1: move.l #$1ff80000,$40(a6) ; D=A+BC
bra.s .cont
.normal: move.l #$0ff80000,$40(a6) ; D=A+BC
.cont: move.l #$ffffffff,$44(a6) ; Masks A
move.l #$00000000,$60(a6) ; CB modulo
move.l #$00000000,$64(a6) ; AD modulo
move.l #mnu_morescreen+mnu_speed*40,$48(a6) ; Source C
move.l mnu_rndptr,$4c(a6) ; Source B
move.l mnu_sourceptrs,d0
sub.l mnu_subtract,d0
move.l d0,$50(a6) ; Source A
move.l #mnu_morescreen,$54(a6) ; Dest D
move.w #(mnu_size-mnu_speed)*64+20,$58(a6) ; Size and trigger
rts
mnu_pass2:; move.l #$0ff80000,$40(a6) ; D=A+BC
; move.l #$ffffffff,$44(a6) ; Masks A
; move.l #$00000000,$60(a6) ; CB modulo
; move.l #$00000000,$64(a6) ; AD modulo
move.l #mnu_morescreen+40*256+mnu_speed*40,$48(a6) ; Source C
move.l mnu_rndptr,$4c(a6) ; Source B
move.l mnu_sourceptrs+4,d0
sub.l mnu_subtract,d0
move.l d0,$50(a6) ; Source A
move.l #mnu_morescreen+40*256,$54(a6) ; Dest D
move.w #(mnu_size-mnu_speed)*64+20,$58(a6) ; Size and trigger
rts
mnu_pass3:; move.l #$0ff80000,$40(a6) ; D=A+BC
; move.l #$ffffffff,$44(a6) ; Masks A
; move.l #$00000000,$60(a6) ; CB modulo
; move.l #$00000000,$64(a6) ; AD modulo
move.l #mnu_morescreen+40*256*2+mnu_speed*40,$48(a6) ; Source C
move.l mnu_rndptr,$4c(a6) ; Source B
move.l mnu_sourceptrs+8,d0
sub.l mnu_subtract,d0
move.l d0,$50(a6) ; Source A
move.l #mnu_morescreen+40*256*2,$54(a6) ; Dest D
move.w #(mnu_size-mnu_speed)*64+20,$58(a6) ; Size and trigger
rts
mnu_cls: lea mnu_morescreen+40*256*6,a1
moveq.l #0,d1
move.w #40*256*3/16-1,d0
.loop:
REPT 4
move.l d1,-(a1)
ENDR
dbra d0,.loop
rts
mnu_animcursor: btst #0,main_counter+3
beq.s .skip
move.l mnu_frameptr,a0
move.b (a0),mnu_arrow
tst.b 1(a0)
beq.s .skip
cmp.b #40,1(a0)
bhi.s .ok
moveq.l #0,d0
move.b 1(a0),d0
sub.l d0,mnu_frameptr
.ok: addq.l #1,mnu_frameptr
.skip: rts
mnu_domenu:;in: a0=Menu ptr
; bsr.w key_flushbuffer
.redraw: move.l a0,-(a7)
bsr.w mnu_openmenu ; Open new menu
move.l (a7)+,a0
.loop: movem.l a0,-(a7)
bsr.w mnu_update
movem.l (a7)+,a0
move.l a0,-(a7)
bsr.w mnu_waitmenu ; Wait for option
move.l (a7)+,a0
moveq.l #0,d2
move.w mnu_row,d2
divu 14(a0),d2
swap.w d2
move.w d2,mnu_currentsel
tst.l d1
beq.s .ok
cmp.w #42,d1
beq.w .left
cmp.w #41,d1
beq.w .right
.ok: cmp.w #-1,d0 ; Esc ???
beq.w .exit ; Yepp exit
move.l 16(a0,d0.w*8),d1 ; Get option type
tst.l d1 ; 0=Do Nothing ???
beq.s .loop
cmp.l #1,d1 ; 1=Sub menu
beq.w .newmenu
cmp.l #2,d1 ; 2=Exit sub
beq.w .exit
cmp.l #3,d1
beq.w .bsr
cmp.l #4,d1
beq.w .left
cmp.l #5,d1
beq.w .leftsl
cmp.l #6,d1
beq.w .jump
cmp.l #7,d1
beq.w .changemenu
cmp.l #8,d1
beq.w .doraw
cmp.l #9,d1
beq.w .doload
cmp.l #10,d1
beq.w .dosave
.wrong: move.l #mnu_errcursanim,mnu_frameptr
bra.w .loop ; Strange option ??? Loop
.dosave: movem.l d0-a6,-(a7)
move.l 20(a0,d0.w*8),a0
move.w mnu_currentlevel,(a0)
bsr.w mnu_savelevel
movem.l (a7)+,d0-a6
; bra.w .loop
bra.w .exit
.doload: movem.l d0-a6,-(a7)
move.l 20(a0,d0.w*8),a0
move.w (a0),mnu_currentlevel
bsr.w mnu_loadlevel
movem.l (a7)+,d0-a6
;bra.w .loop
bra.w .exit
.doraw: movem.l d0-a6,-(a7)
move.l #mnu_buttonanim,mnu_frameptr
move.l 20(a0,d0.w*8),a0
.rawloop: move.l a0,-(a7)
bsr.w mnu_getrawvalue
move.l (a7)+,a0
cmp.w (a0),d0
beq.s .rawcont
cmp.w #69,d0
beq.s .rawcont
lea mnu_rawkeys,a1
.tstraw: move.w (a1)+,d1
cmp.w #$ffff,d1
beq.s .rawok
cmp.w d0,d1
bne.s .tstraw
move.l #mnu_errbutanim,mnu_frameptr
bra.s .rawloop
.rawok: move.w d0,(a0)
.rawcont: move.l #mnu_cursanim,mnu_frameptr
movem.l (a7)+,d0-a6
bra.w .loop
.bsr: movem.l d0-a6,-(a7)
move.l 20(a0,d0.w*8),a0
jsr (a0)
movem.l (a7)+,d0-a6
bra.w .redraw
.jump: move.l 20(a0,d0.w*8),a0
move.l mnu_mainstack,a7
jmp (a0)
;---------------------------------------------------------------------------
.left: move.l 16(a0,d0.w*8),d1
cmp.l #4,d1
bne.s .leftsl
move.l 20(a0,d0.w*8),a1
move.l 10(a1),a2
move.w 8(a1),d0
add.w d0,(a2)
bra.w .loop
.leftsl: cmp.l #5,d1
bne.w .wrong
move.l 20(a0,d0.w*8),a1
move.l 6(a1),a2
addq.w #1,(a2)
bra.w .loop
.right: move.l 16(a0,d0.w*8),d1
cmp.l #4,d1
bne.s .rightsl
move.l 20(a0,d0.w*8),a1
move.l 10(a1),a2
move.w 8(a1),d0
sub.w d0,(a2)
bra.w .loop
.rightsl: cmp.l #5,d1
bne.w .wrong
move.l 20(a0,d0.w*8),a1
move.l 6(a1),a2
subq.w #1,(a2)
bra.w .loop
;------------------------------------------------------------------ New menu --
.changemenu: move.l 20(a0,d0.w*8),a0
bra.w .redraw
.newmenu: move.l a0,-(a7)
move.l 20(a0,d0.w*8),a0 ; Set new menu
bsr.w mnu_domenu
move.l (a7)+,a0
bra.w .redraw
.exit: rts
mnu_redraw:
move.w (a0),d0
move.w 2(a0),d1
move.l 4(a0),a0
bsr.w mnu_printxy
rts
mnu_openmenu:;in:a0=Ptr to menu
; bsr.w key_flushbuffer
move.w mnu_currentlevel,d0
add.w #65,d0
move.b d0,mnu_mainleveltext
move.l a0,-(a7)
move.l #0,mnu_printdelay
bsr.w mnu_cls
move.l #35,timer
.w8a: tst.l timer
bne.s .w8a
move.l (a7)+,a0
move.l a0,-(a7)
move.w (a0),d0
move.w 2(a0),d1
move.l 4(a0),a0
bsr.w mnu_printxy
move.l (a7)+,a0
move.w 8(a0),mnu_curx
move.w 10(a0),mnu_cury
move.w 12(a0),mnu_spread
move.w 14(a0),mnu_items
move.w 14(a0),d0
mulu #3000,d0
move.w d0,mnu_row
move.w d0,mnu_oldrow
bsr.w mnu_update
rts
mnu_waitmenu:;out: d0=Selection number
; move.l #mnu_cursanim,mnu_frameptr
clr.l mnu_printdelay
.loop: moveq.l #0,d1
move.w mnu_oldrow,d1
cmp.w mnu_row,d1
beq.s .skip
; move.l #mnu_cursanim,mnu_frameptr
divu mnu_items,d1
swap.w d1
mulu mnu_spread,d1
add.w mnu_cury,d1
move.w mnu_curx,d0
lea mnu_cleararrow,a0
bsr.w mnu_printxy
.skip:
.w8key: bsr.w mnu_docursor
jsr key_readkey
tst.w d0
beq.s .w8key
cmp.b #69,d0
beq.s .exit
cmp.b #77,d0 ; Down Arrow
beq.s .down
cmp.b #76,d0
beq.s .up
cmp.b #68,d0
beq.s .quit
cmp.b #64,d0
beq.s .quit
cmp.b #78,d0
beq.s .sliderr
cmp.b #79,d0
beq.s .sliderl
move.l #mnu_errcursanim,mnu_frameptr
bra.w .loop
.exit: moveq.l #-1,d0 ; Esc key
moveq.l #0,d1
rts
.sliderr: moveq.l #41,d1
bra.s .cpcont
.sliderl: moveq.l #42,d1
bra.s .cpcont
.quit: moveq.l #0,d1
.cpcont: move.w mnu_row,d0
divu mnu_items,d0
swap.w d0
and.l #$ffff,d0
rts
.down: addq.w #1,mnu_row
bra.w .loop
.up: subq.w #1,mnu_row
bra.w .loop
mnu_docursor: moveq.l #0,d1
move.w mnu_row,d1
move.w d1,mnu_oldrow
divu mnu_items,d1
swap.w d1
mulu mnu_spread,d1
add.w mnu_cury,d1
move.w mnu_curx,d0
lea mnu_arrow,a0
bsr.w mnu_printxy
rts
mnu_docursor1: moveq.l #0,d1
move.w mnu_row,d1
divu mnu_items,d1
swap.w d1
mulu mnu_spread,d1
add.w mnu_cury,d1
move.w mnu_curx,d0
lea mnu_arrow,a0
bsr.w mnu_printxy
rts
mnu_update:;in: a0=Ptr to menu
move.w 14(a0),d7
subq.w #1,d7
move.w 10(a0),d1 ; d1=YPos
move.w 8(a0),d0
move.l a0,a1
add.l #16,a1
.itemloop: move.l (a1)+,d2
cmp.l #4,d2 ; Slider ?
beq.s .doslider
cmp.l #5,d2 ; Slider ?
beq.s .docycler
cmp.l #8,d2
beq.s .dorawkey
cmp.l #9,d2
beq.s .doloadlevel
cmp.l #10,d2
beq.s .doloadlevel
.continue: add.w 12(a0),d1
addq.l #4,a1
dbra d7,.itemloop
rts
.doslider: movem.l d0-a6,-(a7)
move.l (a1),a0 ; a0=Slider ptr
bsr.w mnu_putslider
movem.l (a7)+,d0-a6
bra.s .continue
.docycler: movem.l d0-a6,-(a7)
move.l (a1),a0 ; a0=Cycler ptr
bsr.w mnu_putcycler
movem.l (a7)+,d0-a6
bra.s .continue
.dorawkey: movem.l d0-a6,-(a7)
move.l (a1),a0 ; a0=Ptr to value
move.w (a0),d3
add.w #132,d3
add.w #2,d0
move.b d3,mnu_rawprint
lea mnu_rawprint,a0
bsr.w mnu_printxy
movem.l (a7)+,d0-a6
bra.s .continue
.doloadlevel: movem.l d0-a6,-(a7)
move.l (a1),a0
move.w (a0),d2 ; d0=Level no
add.w #65,d2
move.b d2,mnu_levelno
addq.w #2,d0
lea mnu_leveltext,a0
bsr.w mnu_printxy
movem.l (a7)+,d0-a6
bra.s .continue
mnu_putslider:;in: d0,d1,d7,a0=Xpos,Ypos,Spread,Slider ptr
add.w (a0),d0
add.w 2(a0),d1
move.w d0,.xpos
movem.l d0-d1/a0,-(a7)
lea mnu_leftslider,a0
bsr.w mnu_printxy
movem.l (a7)+,d0-d1/a0
addq.w #2,d0
move.w 6(a0),d2
lsr.w #4,d2
tst.w d2
beq.s .skip
move.w d2,d4
movem.l d0-d1/a0,-(a7)
lea mnu_sliderspace,a0
move.l a0,a1
subq.w #1,d2
.loop: move.b #59,(a1)+
dbra d2,.loop
clr.b (a1)
bsr.w mnu_printxy
movem.l (a7)+,d0-d1/a0
add.w d4,d0
add.w d4,d0
.skip: move.w 6(a0),d2
and.w #$f,d2
beq.w .skip2
move.w d2,d5
subq.w #1,d2
moveq.l #0,d3
.loop1: ror.w #1,d3
or.w #$8000,d3
dbra d2,.loop1
movem.l d0-d1,-(a7)
mulu d7,d1
add.w d0,d1
add.l #mnu_morescreen+40*256*3,d1
move.l d1,a4 ; a4=Screen Ptr
movem.l (a7)+,d0-d1
swap.w d3
clr.w d3
moveq.l #15,d2
move.l a4,a5
move.l mnu_sliddat,a3
.loop2: move.l (a3),d4
and.l d3,d4
move.l d4,(a4)
move.l 176*40(a3),d4
and.l d3,d4
move.l d4,40*256(a4)
move.l 176*40*2(a3),d4
and.l d3,d4
move.l d4,40*256*2(a4)
add.l #40,a3
add.l #40,a4
dbra d2,.loop2
move.l a5,a4
moveq.l #15,d2
move.l mnu_sliddat,a3
.loop3: move.l 2(a3),d4
lsr.l d5,d4
or.l d4,(a4)
move.l 2+176*40(a3),d4
lsr.l d5,d4
or.l d4,40*256(a4)
move.l 2+176*40*2(a3),d4
lsr.l d5,d4
or.l d4,40*256*2(a4)
add.l #40,a3
add.l #40,a4
dbra d2,.loop3
bra.s .cont1
.skip2: movem.l d0/d1/a0,-(a7)
lea mnu_rightslider,a0
bsr.w mnu_printxy
movem.l (a7)+,d0/d1/a0
.cont1: move.l 10(a0),a1 ; Value 2 change ptr
move.w (a1),d0
cmp.w #0,d0
bge.s .ok1
moveq.l #0,d0
.ok1: cmp.w 4(a0),d0
ble.s .ok2
move.w 4(a0),d0
.ok2: move.w d0,(a1)
mulu 6(a0),d0
divu 4(a0),d0 ; d0=Slider position X
sub.w mnu_sliderwidth,d0
move.w .xpos,d2
lsl.w #3,d2
add.w d2,d0
move.w d0,d2
and.l #$f,d2
lsr.w #4,d0
lsl.w #1,d0
addq.w #2,d0
and.l #$ffff,d0
mulu d7,d1
add.l d0,d1
add.l #mnu_morescreen+40*256*3,d1
move.l d1,a4 ; a1=Screen ptr
moveq.l #15,d3
move.l mnu_sliddat,a3
.loop4: move.l 6(a3),d4
lsr.l d2,d4
or.l d4,(a4)
move.l 6+176*40(a3),d4
lsr.l d2,d4
or.l d4,40*256(a4)
move.l 6+176*40*2(a3),d4
lsr.l d2,d4
or.l d4,40*256*2(a4)
add.l #40,a3
add.l #40,a4
dbra d3,.loop4
rts
.xpos: dc.w 0
mnu_putcycler:;in: d0,d1,a0=Xpos,Ypos,Spread,Cycler ptr
add.w (a0),d0
add.w 2(a0),d1
move.l 6(a0),a1
moveq.l #0,d2
move.w (a1),d2
divu 4(a0),d2
swap.w d2
move.w d2,(a1)
move.l 10(a0,d2.w*4),a0
bsr.w mnu_printxy
rts
mnu_plot:
move.w #49,d7
lea mnu_sines,a0
lea mnu_xsine0,a1
move.l a0,a3
plotlist:
move.w (a1),d0
and.w #1022,d0
move.w (a0,d0.w),d1
move.w 4(a1),d0
and.w #1022,d0
add.w (a0,d0.w),d1
asr.w #4,d1
add.w #160,d1
move.w 2(a1),d0
and.w #1022,d0
move.w (a0,d0.w),d2
move.w 6(a1),d0
and.w #1022,d0
add.w (a0,d0.w),d2
asr.w #4,d2
add.w #128,d2
mulu #40,d2
move.w d1,d0
lsr.w #3,d1
add.w d1,d2
neg.w d0
addq.w #$7,d0
add.l #mnu_morescreen,d2
move.l d2,a2
bset.b d0,(a2)
bset.b d0,40*256(a2)
bset.b d0,40*256*2(a2)
REPT 4
move.w (a3)+,d0
and.w #3,d0
add.w #2,d0
add.w d0,(a1)+
ENDR
dbra d7,plotlist
rts
mnu_getrawvalue:;out: d0=Raw value
bsr.w mnu_docursor1
move.b lastpressed,d0
beq.s mnu_getrawvalue
move.b #0,lastpressed
move.w #$ffff,mnu_oldrow
rts
; Waits until a key is pressed the returns the raw value
; bsr.w mnu_docursor1
; tst.b key_keypressed
; bne.s mnu_getrawvalue
;.loop: bsr.w mnu_docursor1
; tst.b key_keypressed
; beq.s .loop
; move.b key_rawkey,d0
; and.l #$ff,d0
; move.l d0,-(a7)
;.oloop: bsr.w mnu_docursor1
; tst.b key_keypressed
; bne.s .oloop
; bsr.w key_flushbuffer
; move.w #$ffff,mnu_oldrow
; move.l (a7)+,d0
; rts
mnu_test4quit: clr.w mnu_quitflag
bsr.w mnu_docursor
jsr key_readkey
cmp.w #27,d0
beq.s .quit
cmp.w #13,d0
beq.s .quit
cmp.w #32,d0
beq.s .quit
tst.w d0
beq.s .skip
move.l #mnu_errcursanim,mnu_frameptr
.skip: moveq.l #-1,d0
tst.w d0
rts
.quit: st.b mnu_quitflag
moveq.l #0,d0
tst.w d0
rts
mnu_quitflag: dc.w 0
mnu_playgame: cmp.w #1,mnu_playtype ; Is it 2 player master ???
bne.w .noplayermaster
lea mnu_2pmastermenu,a0
bsr.w mnu_domenu
cmp.w #1,mnu_currentsel
bne.s .rts
bsr.w mnu_cls
lea mnu_slavewaittext,a0
IFND mnu_nowait
moveq.l #6,d0
moveq.l #60,d1
bsr.w mnu_printxy
clr.w mnu_spread
move.w #4,mnu_curx
move.w #140,mnu_cury
bsr.w mnu_wait4slave
tst.w mnu_quitflag
beq.s .playgame
rts
ENDC
bra.s .playgame
.rts: rts
.noplayermaster:cmp.w #2,mnu_playtype
bne.w .playgame
IFND mnu_nowait
bsr.w mnu_cls
lea mnu_masterwaittext,a0
moveq.l #6,d0
moveq.l #60,d1
bsr.w mnu_printxy
clr.w mnu_spread
move.w #4,mnu_curx
move.w #140,mnu_cury
bsr.w mnu_wait4master
tst.w mnu_quitflag
beq.s .playgame
rts
ENDC
.playgame: bsr.w mnu_clearscreen
;-------------------------------------- Jump to game here !! --
move.w mnu_playtype,d0
lea .playtypeptr,a0
move.l (a0,d0.w*4),a0
jsr (a0)
bsr.w mnu_setscreen
rts
.playtypeptr: dc.l mnu_play1p
dc.l mnu_play2pMaster
dc.l mnu_play2pSlave
*******************************************************************************
*******************************************************************************
*******************************************************************************
*******************************************************************************
mnu_wait4slave: ; Wait for the slave to connect.
.loop: bsr.w mnu_test4quit ; Check for "cancel" (and cursor)
beq.s .rts ; Cancel key was selected
;.............. Do your tests here .................................
;.............. if the slave connects just exit with a rts .........
btst #6,$bfe001
bne.s .loop
.loop1: btst #6,$bfe001
beq.s .loop1
.rts: rts
*******************************************************************************
mnu_wait4master:; Wait for the master to connect.
.loop: bsr.w mnu_test4quit ; Check for "cancel" (and cursor)
beq.s .rts ; Cancel key was selected
;.............. Do your tests here ..................................
;.............. if the master connects just exit with a rts .........
btst #6,$bfe001
bne.s .loop
.loop1: btst #6,$bfe001
beq.s .loop1
.rts: rts
*******************************************************************************
mnu_play1p: ; Do the 1 player game stuff here
.loop: btst #6,$bfe001
bne.s .loop
rts
*******************************************************************************
mnu_play2pMaster:; Do the 2 player master game stuff here
.loop: btst #6,$bfe001
bne.s .loop
rts
*******************************************************************************
mnu_play2pSlave:; Do the 2 player slave game stuff here
.loop: btst #6,$bfe001
bne.s .loop
rts
*******************************************************************************
mnu_loadlevel: ; Level to load is in mnu_currentlevel.w
; Current menu item is in mnu_currentsel.w (0 based)
rts
*******************************************************************************
mnu_savelevel: ; Level to save is in mnu_currentlevel.w
; Current menu item is in mnu_currentsel.w (0 based)
; Or all saved levels in the mnu_levellist+n*2.w
rts
*******************************************************************************
; include "demo:System/KeyBoard.S"
****************************************************************** Variables **
mnu_2plevel: dc.w 0
mnu_currentsel: dc.w 0 ; Containes the current menu item
mnu_currentlevel:
mnu_level: dc.w 0 ; Current level choosen. 0=A,1=B...
mnu_playtype: dc.w 0 ; Selected type of game. 0=1 player
; 1=2 player master
; 2=2 player slave
;------------------------------------------------- Rawcodes for control keys --
mnu_rawkeys: ;----------------------------- Here are all defined raw keys --
mnu_key00: dc.w $4f ; Turn left
mnu_key01: dc.w $4e ; Turn right
mnu_key02: dc.w $4c ; Forwards
mnu_key03: dc.w $4d ; Backwards
mnu_key04: dc.w 101 ; Fire
mnu_key05: dc.w $40 ; Operate door
mnu_key06: dc.w 97 ; Run
mnu_key07: dc.w 103 ; Force sidestep
mnu_key08: dc.w 57 ; Sidestep left
mnu_key09: dc.w 58 ; Sidestep right
mnu_key10: dc.w 34 ; Duck
mnu_key11: dc.w 40 ; Look behind
mnu_key12: dc.w 15 ; Jump
mnu_key13: dc.w 27 ; Look up
mnu_key14: dc.w 42 ; Look down
mnu_key15: dc.w 41 ; Centre view
;------------------------------------------- Put other reserved keys here !! --
dc.w 69 ; Escape
dc.w 1,2,3,4,5,6,7,8,9,10 ; Weapon selects
dc.w 80 ; Zoom in on map
dc.w 81 ; Zoom out on map
dc.w 82 ; 4/8 Channel sound
dc.w 83 ; Mono/Stereo sound
dc.w 84 ; Recall message
dc.w 85 ; Render quality
dc.w 29 ; Map down left
dc.w 30 ; Map down
dc.w 31 ; Map down right
dc.w 45 ; Map left
dc.w 46 ; Center map
dc.w 47 ; Map right
dc.w 61 ; Map up left
dc.w 62 ; Map up
dc.w 63 ; Map up right
dc.w -1 ; End list with -1
mnu_levellist:;----------------------------- Current levels in the save list --
mnu_saved0: dc.w 0 ; Level number for saved pos 0
mnu_saved1: dc.w 1
mnu_saved2: dc.w 3
mnu_saved3: dc.w 8
mnu_saved4: dc.w 4
mnu_saved5: dc.w 11
mnu_xsine0: dc.w 0
mnu_xsine1: dc.w 0
mnu_ysine0: dc.w 0
mnu_ysine1: dc.w 0
ds.l 2*100
mnu_sines:
dc.w $0006,$0013,$001f,$002c,$0038,$0045,$0052,$005e,$006b,$0077
dc.w $0083,$0090,$009c,$00a9,$00b5,$00c1,$00ce,$00da,$00e6,$00f2
dc.w $00ff,$010b,$0117,$0123,$012f,$013b,$0147,$0153,$015f,$016a
dc.w $0176,$0182,$018d,$0199,$01a4,$01b0,$01bb,$01c6,$01d2,$01dd
dc.w $01e8,$01f3,$01fe,$0209,$0213,$021e,$0229,$0233,$023e,$0248
dc.w $0252,$025c,$0266,$0270,$027a,$0284,$028e,$0297,$02a1,$02aa
dc.w $02b4,$02bd,$02c6,$02cf,$02d8,$02e1,$02e9,$02f2,$02fa,$0303
dc.w $030b,$0313,$031b,$0323,$032a,$0332,$0339,$0341,$0348,$034f
dc.w $0356,$035d,$0364,$036a,$0371,$0377,$037d,$0383,$0389,$038f
dc.w $0395,$039a,$039f,$03a5,$03aa,$03af,$03b4,$03b8,$03bd,$03c1
dc.w $03c5,$03c9,$03cd,$03d1,$03d5,$03d8,$03dc,$03df,$03e2,$03e5
dc.w $03e7,$03ea,$03ed,$03ef,$03f1,$03f3,$03f5,$03f7,$03f8,$03f9
dc.w $03fb,$03fc,$03fd,$03fd,$03fe,$03ff,$03ff,$03ff,$03ff,$03ff
dc.w $03ff,$03fe,$03fd,$03fd,$03fc,$03fb,$03f9,$03f8,$03f7,$03f5
dc.w $03f3,$03f1,$03ef,$03ed,$03ea,$03e7,$03e5,$03e2,$03df,$03dc
dc.w $03d8,$03d5,$03d1,$03cd,$03c9,$03c5,$03c1,$03bd,$03b8,$03b4
dc.w $03af,$03aa,$03a5,$039f,$039a,$0395,$038f,$0389,$0383,$037d
dc.w $0377,$0371,$036a,$0364,$035d,$0356,$034f,$0348,$0341,$0339
dc.w $0332,$032a,$0323,$031b,$0313,$030b,$0303,$02fa,$02f2,$02e9
dc.w $02e1,$02d8,$02cf,$02c6,$02bd,$02b4,$02aa,$02a1,$0297,$028e
dc.w $0284,$027a,$0270,$0266,$025c,$0252,$0248,$023e,$0233,$0229
dc.w $021e,$0213,$0209,$01fe,$01f3,$01e8,$01dd,$01d2,$01c6,$01bb
dc.w $01b0,$01a4,$0199,$018d,$0182,$0176,$016a,$015f,$0153,$0147
dc.w $013b,$012f,$0123,$0117,$010b,$00ff,$00f2,$00e6,$00da,$00ce
dc.w $00c1,$00b5,$00a9,$009c,$0090,$0083,$0077,$006b,$005e,$0052
dc.w $0045,$0038,$002c,$001f,$0013,$0006,$fffa,$ffed,$ffe1,$ffd4
dc.w $ffc8,$ffbb,$ffae,$ffa2,$ff95,$ff89,$ff7d,$ff70,$ff64,$ff57
dc.w $ff4b,$ff3f,$ff32,$ff26,$ff1a,$ff0e,$ff01,$fef5,$fee9,$fedd
dc.w $fed1,$fec5,$feb9,$fead,$fea1,$fe96,$fe8a,$fe7e,$fe73,$fe67
dc.w $fe5c,$fe50,$fe45,$fe3a,$fe2e,$fe23,$fe18,$fe0d,$fe02,$fdf7
dc.w $fded,$fde2,$fdd7,$fdcd,$fdc2,$fdb8,$fdae,$fda4,$fd9a,$fd90
dc.w $fd86,$fd7c,$fd72,$fd69,$fd5f,$fd56,$fd4c,$fd43,$fd3a,$fd31
dc.w $fd28,$fd1f,$fd17,$fd0e,$fd06,$fcfd,$fcf5,$fced,$fce5,$fcdd
dc.w $fcd6,$fcce,$fcc7,$fcbf,$fcb8,$fcb1,$fcaa,$fca3,$fc9c,$fc96
dc.w $fc8f,$fc89,$fc83,$fc7d,$fc77,$fc71,$fc6b,$fc66,$fc61,$fc5b
dc.w $fc56,$fc51,$fc4c,$fc48,$fc43,$fc3f,$fc3b,$fc37,$fc33,$fc2f
dc.w $fc2b,$fc28,$fc24,$fc21,$fc1e,$fc1b,$fc18,$fc16,$fc13,$fc11
dc.w $fc0f,$fc0d,$fc0b,$fc09,$fc08,$fc07,$fc05,$fc04,$fc03,$fc03
dc.w $fc02,$fc01,$fc01,$fc01,$fc01,$fc01,$fc01,$fc02,$fc03,$fc03
dc.w $fc04,$fc05,$fc07,$fc08,$fc09,$fc0b,$fc0d,$fc0f,$fc11,$fc13
dc.w $fc16,$fc19,$fc1b,$fc1e,$fc21,$fc24,$fc28,$fc2b,$fc2f,$fc33
dc.w $fc37,$fc3b,$fc3f,$fc43,$fc48,$fc4c,$fc51,$fc56,$fc5b,$fc61
dc.w $fc66,$fc6b,$fc71,$fc77,$fc7d,$fc83,$fc89,$fc8f,$fc96,$fc9c
dc.w $fca3,$fcaa,$fcb1,$fcb8,$fcbf,$fcc7,$fcce,$fcd6,$fcdd,$fce5
dc.w $fced,$fcf5,$fcfd,$fd06,$fd0e,$fd17,$fd1f,$fd28,$fd31,$fd3a
dc.w $fd43,$fd4c,$fd56,$fd5f,$fd69,$fd72,$fd7c,$fd86,$fd90,$fd9a
dc.w $fda4,$fdae,$fdb8,$fdc2,$fdcd,$fdd7,$fde2,$fded,$fdf7,$fe02
dc.w $fe0d,$fe18,$fe23,$fe2e,$fe3a,$fe45,$fe50,$fe5c,$fe67,$fe73
dc.w $fe7e,$fe8a,$fe96,$fea1,$fead,$feb9,$fec5,$fed1,$fedd,$fee9
dc.w $fef5,$ff01,$ff0e,$ff1a,$ff26,$ff32,$ff3f,$ff4b,$ff57,$ff64
dc.w $ff70,$ff7d,$ff89,$ff95,$ffa2,$ffae,$ffbb,$ffc8,$ffd4,$ffe1
dc.w $ffed,$fffa
mnu_mainstack: dc.l 0
;--------------------------------------------------------------- Slider data --
mnu_sliderwidth:dc.w 6
mnu_sliddat: dc.l mnu_font+40*16+7*2
mnu_leftslider: dc.b 58,0
mnu_sliderspace: dcb.b 20,0
mnu_rightslider:dc.b 60,0
mnu_rawprint: dc.b 0,0
even
;----------------------------------------------------------------- Menu data --
mnu_curx: dc.w 5
mnu_cury: dc.w 78
mnu_spread: dc.w 40
mnu_items: dc.w 3
mnu_arrow: dc.b ' ',0
mnu_cleararrow: dc.b ' ',0
mnu_row: dc.w 30000
mnu_oldrow: dc.w 30000
mnu_screenpos: dc.w 0
mnu_printdelay: dc.l 0
;----------------------------------------------------------------- Fire data --
mnu_rndptr: dc.l mnu_morescreen+6*40*256
mnu_sourceptrs: dc.l mnu_morescreen+3*40*256+mnu_speed*40
dc.l mnu_morescreen+4*40*256+mnu_speed*40
dc.l mnu_morescreen+5*40*256+mnu_speed*40
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Menues %%
; Types: 0 = Do nothing
; 1 = Sub menu
; 2 = Exit sub menu
; 3 = Execute subroutine
; 4 = Slider
; 5 = Cycler
; 6 = Branch (SP) set to value in mnu_mainstack
; 7 = Change menu
; 8 = Get raw key
; 9 = Level Load
; 10 = Level Save
mnu_MYMAINMENU:
dc.w 0,0
dc.l mnu_MYMAINMENUTEXT
dc.w 0,40
dc.w 20
dc.w 7
dc.l 0,0
dc.l 0,0
dc.l 0,0
dc.l 0,0
dc.l 0,0
dc.l 0,0
dc.l 0,0
mnu_MYMAINMENUTEXT:
; 12345678901234567890
dc.b ' ',1
dc.b ' ',1
mnu_CURRENTLEVELLINE:
dc.b ' ',1
dc.b ' 1 PLAYER ',1
dc.b ' PLAY GAME ',1
dc.b ' CONTROL OPTIONS ',1
dc.b ' GAME CREDITS ',1
dc.b ' LOAD POSITION ',1
dc.b ' SAVE POSITION ',1
dc.b ' ',1
dc.b ' ',1
dc.b ' ',0
EVEN
mnu_MYCONTROLSONE:
dc.w 0,0
dc.l mnu_MYCONTROLTEXTONE
dc.w 0,0
dc.w 20
dc.w 12
ds.l 24
EVEN
mnu_MYCONTROLTEXTONE:
KEY_LINES:
; 12345678901234567 8 90
dc.b ' TURN LEFT ',132+$4f,' ',1
dc.b ' TURN RIGHT ',132+$4e,' ',1
dc.b ' FORWARDS ',132+$4c,' ',1
dc.b ' BACKWARDS ',132+$4d,' ',1
dc.b ' FIRE ',132+$65,' ',1
dc.b ' OPERATE ',132+$40,' ',1
dc.b ' RUN ',132+$61,' ',1
dc.b ' FORCE S/S ',132+$67,' ',1
dc.b ' S/S LEFT ',132+$39,' ',1
dc.b ' S/S RIGHT ',132+$3a,' ',1
dc.b ' DUCK ',132+$22,' ',1
dc.b ' MORE ',0
EVEN
mnu_MYCONTROLSTWO:
dc.w 0,40
dc.l mnu_MYCONTROLTEXTTWO
dc.w 0,40
dc.w 20
dc.w 7
ds.l 14
EVEN
mnu_MYCONTROLTEXTTWO:
KEY_LINES2:
; 12345678901234567 8 90
dc.b ' LOOK BEHIND ',132+$28,' ',1
dc.b ' JUMP ',132+$0f,' ',1
dc.b ' LOOK UP ',132+027,' ',1
dc.b ' LOOK DOWN ',132+042,' ',1
dc.b ' CENTRE VIEW ',132+041,' ',1
dc.b ' NEXT WEAPON ',132+068,' ',1
dc.b ' MAIN MENU ',0
EVEN
mnu_MYMASTERMENU:
dc.w 0,80
dc.l mnu_MYMASTERTEXT
dc.w 0,80
dc.w 20
dc.w 4
ds.l 8
EVEN
mnu_MYMASTERTEXT:
; 12345678901234567890
dc.b ' 2 PLAYER MASTER ',1
mnu_CURRENTLEVELLINEM:
dc.b ' ',1
dc.b ' PLAY GAME ',1
dc.b ' CONTROL OPTIONS ',0
EVEN
mnu_MYSLAVEMENU:
dc.w 0,80
dc.l mnu_MYSLAVETEXT
dc.w 0,80
dc.w 20
dc.w 3
ds.l 6
EVEN
mnu_MYSLAVETEXT:
; 12345678901234567890
dc.b ' 2 PLAYER SLAVE ',1
dc.b ' PLAY GAME ',1
dc.b ' CONTROL OPTIONS ',0
EVEN
mnu_MYLOADMENU:
dc.w 0,40
dc.l mnu_MYLOADMENUTEXT
dc.w 0,60
dc.w 20
dc.w 7
ds.l 14
EVEN
mnu_MYLOADMENUTEXT:
; 12345678901234567890
dc.b ' LOAD POSITION ',1
mnu_LSLOTA:
dc.b ' NEW GAME ',1
dc.b ' ',1
dc.b ' ',1
dc.b ' ',1
dc.b ' ',1
dc.b ' ',1
dc.b ' CANCEL ',0
EVEN
mnu_MYSAVEMENU:
dc.w 0,40
dc.l mnu_MYSAVEMENUTEXT
dc.w 0,60
dc.w 20
dc.w 6
ds.l 14
EVEN
mnu_MYSAVEMENUTEXT:
; 12345678901234567890
dc.b ' SAVE POSITION ',1
mnu_SSLOTA:
dc.b ' ',1
dc.b ' ',1
dc.b ' ',1
dc.b ' ',1
dc.b ' ',1
dc.b ' CANCEL ',0
EVEN
mnu_askfordisk:
dc.w 0,70
dc.l mnu_askfordisktext
dc.w 0,110 ; top of where cursor starts (1st option)
dc.w 20
dc.w 1
dc.l 2,0
mnu_mainmenu: dc.w 6,12 ; X (bytes),Y (rows) of top left of scrn
dc.l mnu_maintext ; Text ptr
dc.w 4,70 ; XCursor,YCursor
dc.w 20 ; Spread
dc.w 7 ; Items
dc.l 5,mnu_playercycler ; Change player type
dc.l 3,mnu_playgame
dc.l 1,mnu_controlmenu0
dc.l 3,mnu_viewcredz
dc.l 1,mnu_loadmenu
dc.l 1,mnu_savemenu
dc.l 2,0 ; 2=Exit sub menu (Esc)
mnu_controlmenu0:dc.w 6,32 ; X,Y
dc.l mnu_controltext0 ; Text ptr
dc.w 4,50 ; XCursor,YCursor
dc.w 20 ; Spread
dc.w 9 ; Items
dc.l 8,mnu_key00
dc.l 8,mnu_key01
dc.l 8,mnu_key02
dc.l 8,mnu_key03
dc.l 8,mnu_key04
dc.l 8,mnu_key05
dc.l 8,mnu_key06
dc.l 8,mnu_key07
dc.l 7,mnu_controlmenu1
mnu_controlmenu1:dc.w 6,32 ; X,Y
dc.l mnu_controltext1 ; Text ptr
dc.w 4,50 ; XCursor,YCursor
dc.w 20 ; Spread
dc.w 9 ; Items
dc.l 8,mnu_key08
dc.l 8,mnu_key09
dc.l 8,mnu_key10
dc.l 8,mnu_key11
dc.l 8,mnu_key12
dc.l 8,mnu_key13
dc.l 8,mnu_key14
dc.l 8,mnu_key15
dc.l 7,mnu_controlmenu2
mnu_controlmenu2:dc.w 4,12 ; X,Y
dc.l mnu_controltext2 ; Text ptr
dc.w 4,210 ; XCursor,YCursor
dc.w 20 ; Spread
dc.w 1 ; Items
dc.l 7,mnu_controlmenu0
mnu_loadmenu: dc.w 4,42
dc.l mnu_loadmenutext
dc.w 4,80 ; XCursor,YCursor
dc.w 20 ; Spread
dc.w 7 ; Items
dc.l 9,mnu_saved0
dc.l 9,mnu_saved1
dc.l 9,mnu_saved2
dc.l 9,mnu_saved3
dc.l 9,mnu_saved4
dc.l 9,mnu_saved5
dc.l 2,0
mnu_savemenu: dc.w 4,42
dc.l mnu_savemenutext
dc.w 4,80 ; XCursor,YCursor
dc.w 20 ; Spread
dc.w 7 ; Items
dc.l 10,mnu_saved0
dc.l 10,mnu_saved1
dc.l 10,mnu_saved2
dc.l 10,mnu_saved3
dc.l 10,mnu_saved4
dc.l 10,mnu_saved5
dc.l 2,0
mnu_quitmenu: dc.w 4,82
dc.l mnu_quitmenutext
dc.w 4,120 ; XCursor,YCursor
dc.w 20 ; Spread
dc.w 2 ; Items
dc.l 6,mnu_loop
dc.l 6,mnu_exit
mnu_2pmastermenu:
dc.w 4,82
dc.l mnu_2pmastertext
dc.w 4,120 ; XCursor,YCursor
dc.w 20 ; Spread
dc.w 3 ; Items
dc.l 5,mnu_levelcycler
dc.l 2,0
dc.l 2,0
;--------------------------------------------------------------------- Texts --
mnu_askfordisktext:
; 12345678901234567890
dc.b 'Please Insert Volume',1
dc.b 1
mnu_diskline:
dc.b ' ',0
mnu_slavewaittext:
dc.b 'Waiting for ',1
dc.b 'your opponent',1
dc.b 'to respond...',1,1
dc.b 58,58,'Cancel',0
mnu_masterwaittext:
dc.b 'Waiting for ',1
dc.b 'your opponent',1
dc.b 'to respond...',1,1
dc.b 58,58,'Cancel',0
mnu_maintext: dc.b 1,1
dc.b 60,'Level '
mnu_mainleveltext:dc.b 'A',58,1
dc.b 1
dc.b 'Play game',1
dc.b 'Control options',1
dc.b 'Game credits',1
dc.b 'Load position',1
dc.b 'Save position',1
dc.b 'Quit',1
dc.b 0
mnu_quitmenutext:dc.b ' Quit game',131,131,131,1,1
dc.b ' No,I',39,'m addicted',1
dc.b ' Yes! Let me OUT',1
dc.b 0
mnu_2pmastertext:dc.b ' 2 Player master',1,1
dc.b ' Play level',1
dc.b ' Start game',1
dc.b ' ',58,58,'Cancel',1
dc.b 0
mnu_loadmenutext:dc.b ' Load game',1,1
dc.b 1,1,1,1,1,1
dc.b ' ',58,58,'Cancel',58,58,0
mnu_savemenutext:dc.b ' Save game',1,1
dc.b 1,1,1,1,1,1
dc.b ' ',58,58,'Cancel',58,58,0
mnu_controltext0:dc.b 1
dc.b ' Turn left',1
dc.b ' Turn right',1
dc.b ' Forwards',1
dc.b ' Backwards',1
dc.b ' Fire',1
dc.b ' Operate door',1
dc.b ' Run',1
dc.b ' Sidestep',1
dc.b 60,60,'More',60,60,1
dc.b 0
mnu_controltext1:dc.b 1
dc.b ' Sidestep left',1
dc.b ' Sidestep right',1
dc.b ' Duck',1
dc.b ' Look behind',1
dc.b ' Jump',1
dc.b ' Look up',1
dc.b ' Look down',1
dc.b ' Centre view',1
dc.b 60,60,'Others',60,60,1
dc.b 0
mnu_controltext2:dc.b 1
dc.b 157,'Pause',1
dc.b 212,'Zoom in on map',1
dc.b 213,'Zoom out on map',1
dc.b 214,'4/8 Ch. sound',1
dc.b 215,'Mono/Stereo snd',1
dc.b 216,'Recall message',1
dc.b 217,'Render quality',1
dc.b 133,'-',142,'Select weapon',1
dc.b 161,'-',195,'Scroll map',1
dc.b ' ',58,58,'Back',58,58,1
dc.b 0
mnu_leveltext: dc.b 'Level '
mnu_levelno: dc.b 'A',0
mnu_protecttext:dc.b 'ENTER NUMBER AT',1,1
dc.b ' TABLE '
mnu_tableptr: dc.b '0',1
dc.b ' ROW '
mnu_rowptr: dc.b '00',1
dc.b ' COLUMN '
mnu_columnptr: dc.b '0',1,1
dc.b ' NUMBER '
mnu_numberptr: dc.b ' '
dc.b 0
mnu_wrongtext: dc.b 'Wrong!',0
mnu_dontbelong: dc.b 'Nice try.',0
even
;------------------------------------------------------- Cyclers and sliders --
mnu_level0: dc.b 'A',0
mnu_level1: dc.b 'B',0
mnu_level2: dc.b 'C',0
mnu_level3: dc.b 'D',0
mnu_level4: dc.b 'E',0
mnu_level5: dc.b 'F',0
mnu_level6: dc.b 'G',0
mnu_level7: dc.b 'H',0
mnu_level8: dc.b 'I',0
mnu_level9: dc.b 'J',0
mnu_level10: dc.b 'K',0
mnu_level11: dc.b 'L',0
mnu_level12: dc.b 'M',0
mnu_level13: dc.b 'N',0
mnu_level14: dc.b 'O',0
mnu_level15: dc.b 'P',0
even
mnu_levelcycler:dc.w 24,2 ; X,Y Add
dc.w 16 ; #of items
dc.l mnu_2plevel ; Value to effect
dc.l mnu_level0
dc.l mnu_level1
dc.l mnu_level2
dc.l mnu_level3
dc.l mnu_level4
dc.l mnu_level5
dc.l mnu_level6
dc.l mnu_level7
dc.l mnu_level8
dc.l mnu_level9
dc.l mnu_level10
dc.l mnu_level11
dc.l mnu_level12
dc.l mnu_level13
dc.l mnu_level14
dc.l mnu_level15
even
mnu_playercycler:dc.w 2,2 ; X,Y Add
dc.w 3 ; #of items
dc.l mnu_playtype ; Value to effect
dc.l mnu_playtype0
dc.l mnu_playtype1
dc.l mnu_playtype2
even
mnu_playtype0: dc.b '1 Player ',0
mnu_playtype1: dc.b '2 Player master',0
mnu_playtype2: dc.b '2 Player slave ',0
;----------------------------------------------------------------- Animation --
mnu_frameptr: dc.l mnu_cursanim
mnu_errcursorlong:
dc.b 240,240,241,241,242,242,243,243
dc.b 240,240,241,241,242,242,243,243
dc.b 240,240,241,241,242,242,243,243
dc.b 240,240,241,241,242,242,243,243
dc.b 240,240,241,241,242,242,243,243
dc.b 240,240,241,241,242,242,243,243
dc.b 240,240,241,241,242,242,243,243
dc.b 240,240,241,241,242,242,243,243
dc.b 240,240,241,241,242,242,243,243
mnu_errcursanim:dc.b 240,240,241,241,242,242,243,243
dc.b 240,240,241,241,242,242,243,243
dc.b 240,240,241,241,242,242,243,243
dc.b 240,240,241,241,242,242,243,243
mnu_cursanim: dc.b 130,129,128,127,126,125,124,123,8
even
mnu_errbutanim: dc.b 240,240,241,241,242,242,243,243
dc.b 240,240,241,241,242,242,243,243
dc.b 240,240,241,241,242,242,243,243
dc.b 240,240,241,241,242,242,243,243
mnu_buttonanim: dc.b 236,236,236,236
dc.b 237,237,237,237
dc.b 238,238,238,238
dc.b 239,239,239,239
dc.b 238,238,238,238
dc.b 237,237,237,237
dc.b 24
even
mnu_font: incbin "demo:Menu/font16x16.raw2"
mnu_fontpal: incbin "demo:Menu/FONT16x16.PAL2"
mnu_firepal: incbin "Demo:Menu/FirePal.Pal2"
mnu_backpal: incbin "demo:Menu/Back.Pal"
mnu_palette: ds.l 256
mnu_frame: incbin "demo:Menu/Credits_Only.Raw"
section data_c,data_c
mnu_copper:
dc.w intreq,$8010
dc.l $01000211,$01020000,$01040000
dc.l $0108fff8,$010afff8,$010c0000
dc.l $01fc0003
dc.l $008e2881,$009028c1,$00920038,$009400d0
mnu_bplptrs: dc.l $00e00000,$00e20000,$00e40000,$00e60000
dc.l $00e80000,$00ea0000,$00ec0000,$00ee0000
dc.l $00f00000,$00f20000,$00f40000,$00f60000
dc.l $00f80000,$00fa0000,$00fc0000,$00fe0000
mnu_colptrs: ds.l (32+1)*8*2+1
cnop 64,64
mnu_screen: incbin "Demo:Menu/Back2.Raw"
ds.b 40*256*2
mnu_morescreen: ds.b 40*256*8
counter: dc.l 0
main_vblint: dc.l 0
main_counter: dc.l 0
main_bltint: dc.l 0
main_vbrbase: dc.l 0
timer: dc.l 0